iT邦幫忙

2022 iThome 鐵人賽

DAY 26
0
Modern Web

React 新手村 - 填坑記系列 第 26

React 新手村 - 填坑記 - Day26 前後端常見運用(一)

  • 分享至 

  • xImage
  •  

React + axios + Django 前後分離CSRF傳遞

在後端Django如需傳遞彼此間要確認的CSRF那在後端的配置上面就需要增加@ensure_csrf_cookie
類似如下

@ensure_csrf_cookie
def login_auth(request):
    if request.method != "POST":
        return HttpResponse()
    login_state = {}
    .....

而在Django官方給出的解決方案
https://ithelp.ithome.com.tw/upload/images/20221008/20151676RP47MBL2nA.png

就是使用ensure_csrf_cookie,透過cookies方式將CSRFToken發至前端。
但要注意不能將CSRF_COOKIE_SECURE設定為True,否則前端讀不到CSRF的Token

因前後端分離,前端再進行post之前需要先get一次來獲取包含csrftoken的cookies。
ps:Django預設的token在cookies內的名稱就是:csrftoken

axios.get('/Auth/Register')
  .then(()=>{
      this.authUserSending(new Date().getTime())
  })
  .catch((err) => {
      this.networkErr(err);
  });

接這藉由此次get取得csrftoken之後,將得到的token放入Header裡的X-CSRFToken,便可正常進行post資料。
而cookies的取得則是使用 universal-cookie套件來進行

import Cookies from 'universal-cookie';
const cookies = new Cookies();
axios.post('/Auth/Register',
    {
        accessID: this.state.userName,
        accessPWD: this.state.userPassWD,
        nowTime: timeStamp
    },
    {
        headers:{
            'X-CSRFToken':cookies.get('csrftoken')
        }
    })
    .then((response) => {
    ......

上一篇
React 新手村 - 填坑記 - Day25 常見錯誤(四)
下一篇
React 新手村 - 填坑記 - Day27 前後端常見運用(二)
系列文
React 新手村 - 填坑記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言